home *** CD-ROM | disk | FTP | other *** search
/ Utilities Professional 1-1500 / Utilities Professional 1-1500 (1994)(WPD)[!].iso / 12511500 / var1293.dms / var1293.adf / MATHDRILL (.txt) < prev    next >
AmigaBASIC Source Code  |  1989-10-04  |  12KB  |  438 lines

  1. GOTO redux:
  2. recoup:
  3. CLS
  4. STOP
  5. redux:
  6. ON BREAK GOSUB recoup:
  7. BREAK ON
  8. start:
  9.  
  10. ' Math Drill by Alex Bogomolny
  11. DEFINT a-z:WIDTH "scrn:",80
  12. DIM titles$(3):PosReply=18:NegReply=12
  13. DIM sp$(PosReply+NegReply)
  14. RANDOMIZE TIMER:ON BREAK GOSUB ExitProgram:BREAK ON
  15. SCREEN 1,320,200,2,1:WIDTH ,80
  16. WINDOW 2,"Math Drill",,0,1:WINDOW OUTPUT 2
  17. LOCATE 5,3
  18. GOSUB ReadData:GOSUB SetMenu:ON MENU GOSUB ProcessMenu
  19. GOSUB ChooseColors
  20. SAY "THAENKS. WEHLKAHM TUW DHEH MAE3TH DRIYL."
  21. GOSUB RequestSelection
  22. MainStart:
  23.  RANDOMIZE TIMER
  24.  score=6:count=0
  25.   IF oldchoice=0 GOTO MainStart
  26.   IF oldchoice=5 THEN ExitProgram
  27.  WHILE score<25
  28.      choice=oldchoice
  29.     RepeatAfterWrongAnswer:
  30.       GOSUB ChooseColors   
  31.       GOSUB DrawTitle
  32.       GOSUB DigitsChoice
  33.       GOSUB ScoreColumn
  34.       GOSUB GiveProblem 
  35.       GOSUB GetAnswer
  36.       IF answer=axb THEN GOSUB Correct :ELSE GOSUB Wrong
  37.   WEND
  38.   GOSUB RequestSelection
  39.   GOTO MainStart
  40.  ExitProgram:
  41.   SAY "SIY2 YUW AXGEY3N SUW6N."
  42.   MENU OFF:WINDOW CLOSE 2:SCREEN CLOSE 1:WINDOW 1:WINDOW OUTPUT 1
  43. GOTO recoup
  44. '
  45. RequestSelection:
  46.   CLS
  47.   SAY "MEY3K YOHR CHOY4S."
  48.   oldchoice=0
  49.   GOSUB DigitsChoice
  50.  RETURN
  51. ReadData:
  52.   DECLARE FUNCTION Move LIBRARY
  53.   LIBRARY "graphics.library":RP&=WINDOW(8)
  54.   bckgr=0:forgr=1:boxclr=2:flush=3
  55.   stp=2:Maximum=100:MenuOn=0
  56.   FOR i=0 TO 3:READ titles$(i):NEXT
  57.   DATA "ADDITION","SUBTRACTION","MULTIPLICATION","DIVISION"
  58.   FOR i=0 TO PosReply+NegReply:READ sp$(i):NEXT
  59.   DATA "UWRX TEHRIY4FIXK.","AO9BOY7.","GUH3D DJAA6B.","FAY9N."
  60.   DATA "KAH2NGRXAH3CHUHLEY8SHNS.","DHAE2TS GUH4D."
  61.   DATA "GUH2D FAXR YUW5.","NAYS DJAAB.","DHAE2TS GREY6T."
  62.   DATA "YUW2RX GREY6T.","YUW2L MEY8K IHT.","VEH3RIH GUW6D."
  63.   DATA "AY AXM PRAW3D AXV YUW3.","YUW2 DIH5D IHT.","WEH2L DAH4N."
  64.   DATA "YUW MEYK MIH /HAE4PIH.","GREY9T.","DHAETS RAY4T.","KAX2REH5KT."
  65.   DATA "/HAW4Z DHAE2T?","AO2 /HOH /HOH5.","ROH6NG.","AY AXM SAA5RIH."
  66.   DATA "TRAY AXGEY4N.","THIH4NK BEH6TEH2RX.","AA YUW SHUW3R?"
  67.   DATA "YUW3 BEH9T.","KAXM AO2N.","OH KAX3M AO2N.","IHNDIY2D?"
  68.   DATA "AA YUW SIY4RIHEH2Z?"
  69.   RETURN
  70.  RETURN
  71. ScoreColumn:
  72.   LINE (290,0)-(309,199),forgr,bf
  73.   LINE (290,194-8*score)-(309,199),boxclr,bf
  74.   LINE (290,0)-(309,186),forgr,b:LINE(291,1)-(308,185),bckgr,b
  75.   FOR i=2 TO score
  76.     i8=i*8
  77.     LINE(291,193-i8)-(308,193-i8),bckgr
  78.     LINE(301,196-i8)-(303,198-i8),forgr:LINE(303,198-i8)-(306,195-i8),forgr
  79.   NEXT
  80.  RETURN
  81. DigitsChoice:
  82.   FOR i=0 TO 9
  83.     LINE (7+i*24,155)-(30+i*24,172),boxclr,bf
  84.     COLOR ,boxclr:CALL Move&(RP&,13+i*24,167)
  85.     PRINT RIGHT$(STR$(i),1);
  86.     LINE (7+i*24,155)-(30+i*24,172),forgr,b         
  87.   NEXT
  88.   LINE (173,35)-(246,80),boxclr,bf
  89.   LINE (173,92)-(246,136),boxclr,bf
  90.   LINE (173,35)-(246,80),forgr,b
  91.   LINE (173,92)-(246,136),forgr,b
  92.   CALL Move&(RP&,202,60):PRINT "OK":CALL Move&(RP&,182,116):PRINT "CANCEL"
  93.  RETURN  
  94. DrawTitle:
  95.   t$=titles$(choice-1):nt=(30-LEN(t$))/2:LOCATE 1,nt:PRINT t$
  96.  RETURN
  97. GiveProblem:
  98.   IF answer<>axb THEN GOSUB DrawProblem:RETURN
  99.   a=INT(RND*(Maximum+1))
  100.   ON choice GOSUB Addition,Subtraction,Multiplication,Division
  101.   GOSUB DrawProblem
  102.  RETURN 
  103. Addition:
  104.   sign$="+":b=INT(RND*(Maximum+1-a)):axb=a+b:RETURN
  105. Subtraction:
  106.   sign$="-":b=INT(RND*(Maximum+1)):IF b>a THEN SWAP a,b
  107.   axb=a-b:RETURN
  108. Multiplication:
  109.   sign$="x":b=INT(RND^1.2*(Maximum+1)):axb=a*b:RETURN
  110. Division:
  111.   sign$=":":b=INT(RND^1.2*(Maximum+1)):IF b=0 GOTO Division
  112.   axb=a:a=a*b:RETURN
  113. SUB DrawP(x,h) STATIC
  114.   DEFINT a-z
  115.   x$=MID$(STR$(x),2):l=LEN(x$):ll=l
  116.   FOR i=1 TO l
  117.     v=VAL(LEFT$(x$,1))
  118.     'SOUND RND*150+200,2,48,0: SOUND RND*150+200,2,48,1
  119.     'SOUND RND*150+200,2,48,2: SOUND RND*150+200,2,48,3
  120.     CALL DisplayOneDigit(112,l,i,24,h,v)
  121.     ll=ll-1:IF ll<>0 THEN x$=RIGHT$(x$,ll)
  122.   NEXT
  123.  END SUB
  124. DrawProblem:
  125.   LINE(0,10)-(115,115),bckgr,bf 'erase previous example 
  126.   CALL DrawP(a,50)
  127.   nd1=LEN(STR$(a))-1:nd2=LEN(STR$(b))-1:IF nd1<nd2 THEN SWAP nd1,nd2
  128.   Xstart=34+24*(nd1>2):Ystart=64:clr1=bckgr:clr2=forgr
  129.   ON choice GOSUB Plus,Minus,Times,Divide
  130.     'SOUND RND*150+200,2,64,0: SOUND RND*150+200,2,64,1
  131.     'SOUND RND*150+200,2,64,2: SOUND RND*150+200,2,64,3
  132.   CALL DrawP(b,76) 
  133.   LINE(62+24*(axb>=100 OR nd1=3),82)-(112,86),forgr,bf
  134.  RETURN
  135. GetAnswer:
  136.   answer=0:nd=0    'nd is the number of entered digits
  137.  WaitAgain:
  138.   m=MOUSE(0):IF m=0 GOTO WaitAgain
  139.   WHILE MOUSE(0)<>0:WEND
  140.   x=MOUSE(1):y=MOUSE(2)
  141.   IF x>173 AND x<246 AND y>35 AND y<80 THEN CALL Flushlight(173,246,35,80):RETURN  'OK
  142.   IF x>173 AND x<246 AND y>92 AND y<136 THEN answer=0:nd=0:LINE (0,90)-(115,120),bckgr,bf:CALL Flushlight(173,246,92,136):GOTO WaitAgain
  143.   GOSUB SeeIfInteger:IF NOT intgr GOTO WaitAgain
  144.   FOR fl=0 TO 8
  145.     LINE(7+k*24,155)-(30+k*24,172),flush,bf
  146.     LINE(7+k*24,155)-(30+k*24,172),boxclr,bf
  147.   NEXT
  148.   CALL Move&(RP&,13+k*24,167):PRINT RIGHT$(STR$(k),1);
  149.   LINE(7+k*24,155)-(30+k*24,172),forgr,b 
  150.   nd=nd+1
  151.   IF nd>4 THEN
  152.     answer=0:SAY TRANSLATE$("too large a number. sorry for that.")
  153.     LINE (0,90)-(115,115),bckgr,bf:nd=0
  154.   ELSE  
  155.     answer=answer*10+k
  156.     IF MenuOn=0 THEN 
  157.       GOSUB DisplayAnswer 
  158.     ELSE 
  159.       LOCATE 17,nd+3:PRINT RIGHT$(STR$(k),1)
  160.     END IF
  161.   END IF
  162.   GOTO WaitAgain 
  163.  RETURN  
  164. SeeIfInteger:
  165.   intgr=0
  166.   IF y<155 OR y>172 THEN RETURN
  167.   IF x>7 AND x<30 THEN
  168.             intgr=-1:k=0
  169.   ELSEIF x>31 AND x<54 THEN
  170.             intgr=-1:k=1
  171.   ELSEIF x>55 AND x<78 THEN
  172.             intgr=-1:k=2
  173.   ELSEIF x>79 AND x<102 THEN
  174.             intgr=-1:k=3
  175.   ELSEIF x>103 AND x<126 THEN
  176.             intgr=-1:k=4
  177.   ELSEIF x>127 AND x<150 THEN
  178.             intgr=-1:k=5
  179.   ELSEIF x>151 AND x<174 THEN
  180.             intgr=-1:k=6
  181.   ELSEIF x>175 AND x<198 THEN
  182.             intgr=-1:k=7
  183.   ELSEIF x>199 AND x<222 THEN
  184.             intgr=-1:k=8
  185.   ELSEIF x>223 AND x<246 THEN
  186.             intgr=-1:k=9
  187.   END IF
  188.  RETURN
  189. DisplayAnswer:
  190.     FOR scr=1 TO 8
  191.       SCROLL(0,90)-(112,115),-3,0      
  192.     NEXT
  193.     PAINT(110,102),bckgr   
  194.     'SOUND RND*150+350,2,64,0: SOUND RND*150+350,2,64,1
  195.     'SOUND RND*150+350,2,64,2: SOUND RND*150+350,2,64,3
  196.     CALL DisplayOneDigit(112,nd,nd,24,112,k)
  197.  RETURN     
  198. Correct:
  199.     score=score+1:SAY sp$(FIX(RND*(PosReply+1)))
  200.  RETURN
  201. Wrong:
  202.   score=score-1:IF score<1 THEN score=1
  203.   SAY sp$(FIX((PosReply+1)+RND*NegReply))
  204.   a$=MID$(STR$(a),2):b$=MID$(STR$(b),2)
  205.   LOCATE 16,2:PRINT "Correct Result:":LOCATE 17,8
  206.   PRINT a$;sign$;b$;"=";MID$(STR$(axb),2)
  207.   CALL Waiting(3):LINE (0,120)-(60,150),bckgr,bf
  208.  RETURN RepeatAfterWrongAnswer
  209. SUB Waiting(n) STATIC
  210.   FOR i=1 TO n:now$=TIME$:WHILE TIME$=now$:WEND:NEXT
  211.  END SUB
  212. ChooseColors:
  213.   PALETTE bckgr,RND/4,RND/2,RND/2
  214.   PALETTE forgr,RND/8,(4+RND)/5,RND/2
  215.   PALETTE boxclr,(3+RND)/4,RND/4,RND/2
  216.   PALETTE flush,(3+RND)/4,(1+RND)/3,(3+RND)/8
  217.   IF RND<0.5 THEN SWAP forgr,bckgr
  218.   IF RND<0.5 THEN SWAP flush,boxclr
  219.   COLOR forgr,bckgr:CLS 
  220.  RETURN 
  221. SUB Flushlight(x1,x2,y1,y2) STATIC
  222.   DEFINT a-z
  223.   SHARED flush,bckgr
  224.   FOR j=1 TO 3
  225.     FOR i=1 TO 6
  226.       PALETTE flush,(1+RND)/2,(1+RND)/2,(1+RND)/2
  227.       LINE(x1-i,y1-i)-(x2+i,y2+i),flush,b
  228.     NEXT
  229.     FOR i=6 TO 1 STEP -1
  230.       LINE(x1-i,y1-i)-(x2+i,y2+i),bckgr,b
  231.     NEXT
  232.   NEXT
  233.  END SUB
  234. SUB DisplayOneDigit(Xptr,TotalLength,Xoffset,Xsize,Ystart,v) STATIC
  235.   SHARED stp,forgr,bckgr
  236.   DEFINT a-z
  237.   Xstart=Xptr-(TotalLength-Xoffset+1)*Xsize
  238.   PSET(Xstart,Ystart),bckgr
  239.   ON (v+1) GOSUB Digit0,Digit1,Digit2,Digit3,Digit4,Digit5,Digit6,Digit7,Digit8,Digit9
  240.   COLOR forgr
  241. EXIT SUB  
  242.  Digit0:
  243.    AREA STEP(0,-stp):AREA STEP(0,-8*stp):AREA STEP(stp,-stp)
  244.    AREA STEP(8*stp,0):AREA STEP(stp,stp):AREA STEP(0,8*stp)
  245.    AREA STEP(-stp,stp):AREA STEP(-8*stp,0):AREA STEP(-stp,-stp)
  246.    AREAFILL
  247.    PSET STEP(2*stp+1,-2-stp):AREA STEP(0,3-6*stp):AREA STEP(6*stp-3,0)
  248.    AREA STEP(3-6*stp,6*stp-3):COLOR bckgr:AREAFILL
  249.    PSET STEP(2*stp,1):AREA STEP(4*stp-2,2-4*stp):AREA STEP(0,4*stp-2)
  250.    AREA STEP(2-4*stp,0):AREAFILL
  251.   RETURN
  252.  END
  253.  Digit1:
  254.    AREA STEP(0,-2*stp):AREA STEP(4*stp,0):AREA STEP(0,-5*stp)
  255.    AREA STEP(-3*stp,0):AREA STEP(3*stp,-3*stp):AREA STEP(2*stp,0)
  256.    AREA STEP(0,8*stp):AREA STEP(4*stp,0):AREA STEP(0,2*stp)
  257.    AREA STEP(-10*stp,0):AREAFILL
  258.   RETURN
  259.  END
  260.  Digit2:
  261.    AREA STEP(0,-5*stp):AREA STEP(stp,-stp):AREA STEP(7*stp,0)
  262.    AREA STEP(0,-2*stp):AREA STEP(-6*stp,0):AREA STEP(0,stp)
  263.    AREA STEP(-2*stp,0):AREA STEP(0,-2*stp):AREA STEP(stp,-stp)
  264.    AREA STEP(8*stp,0):AREA STEP(stp,stp):AREA STEP(0,4*stp)
  265.    AREA STEP(-stp,stp):AREA STEP(-7*stp,0):AREA STEP(0,2*stp)
  266.    AREA STEP(8*stp,0):AREA STEP(0,2*stp):AREA STEP(-10*stp,0)
  267.    AREAFILL
  268.   RETURN
  269.  END
  270.  Digit3:
  271.    AREA STEP(0,-2*stp):AREA STEP(8*stp,0):AREA STEP(0,-2*stp)
  272.    AREA STEP(-6*stp,0):AREA STEP(0,-2*stp):AREA STEP(6*stp,0)
  273.    AREA STEP(0,-2*stp):AREA STEP(-8*stp,0):AREA STEP(0,-2*stp)
  274.    AREA STEP(9*stp,0):AREA STEP(stp,stp):AREA STEP(0,3*stp)
  275.    AREA STEP(-stp,stp):AREA STEP(stp,stp):AREA STEP(0,3*stp)
  276.    AREA STEP(-stp,stp):AREA STEP(-9*stp,0)
  277.    AREAFILL
  278.   RETURN
  279.  END
  280.  Digit4:
  281.    PSET STEP(6*stp,0),bcgr
  282.    AREA STEP(0,-4*stp):AREA STEP(-6*stp,0):AREA STEP(0,-6*stp)
  283.    AREA STEP(2*stp,0):AREA STEP(0,4*stp):AREA STEP(4*stp,0)
  284.    AREA STEP(0,-4*stp):AREA STEP(2*stp,0):AREA STEP(0,4*stp)
  285.    AREA STEP(2*stp,0):AREA STEP(0,2*stp):AREA STEP(-2*stp,0)
  286.    AREA STEP(0,4*stp):AREA STEP(-2*stp,0)
  287.    AREAFILL
  288.   RETURN
  289.  END
  290.  Digit5:
  291.    PSET STEP(0,-stp),bckgr
  292.    AREA STEP(0,-2*stp):AREA STEP(2*stp,0):AREA STEP(0,stp)
  293.    AREA STEP(6*stp,0):AREA STEP(0,-2*stp):AREA STEP(-7*stp,0)
  294.    AREA STEP(-stp,-stp):AREA STEP(0,-5*stp):AREA STEP(10*stp,0)
  295.    AREA STEP(0,2*stp):AREA STEP(-8*stp,0):AREA STEP(0,2*stp)
  296.    AREA STEP(7*stp,0):AREA STEP(stp,stp):AREA STEP(0,4*stp)
  297.    AREA STEP(-stp,stp):AREA STEP(-8*stp,0):AREA STEP(-stp,-stp)
  298.    AREAFILL
  299.   RETURN
  300.  END
  301.  Digit6:
  302.    PSET STEP(0,-stp),bckgr
  303.    AREA STEP(0,-8*stp):AREA STEP(stp,-stp):AREA STEP(9*stp,0)
  304.    AREA STEP(0,2*stp):AREA STEP(-8*stp,0):AREA STEP(0,2*stp)
  305.    AREA STEP(7*stp,0):AREA STEP(stp,stp):AREA STEP(0,4*stp)
  306.    AREA STEP(-stp,stp):AREA STEP(-8*stp,0):AREA STEP(-stp,-stp)
  307.    AREAFILL
  308.    PSET STEP(2*stp,-stp):AREA STEP(1,-2*stp+1)
  309.    AREA STEP(6*stp-2,0):AREA STEP(0,2*stp-2):AREA STEP(-6*stp+2,0)
  310.    COLOR bckgr:AREAFILL
  311.   RETURN
  312.  END
  313.  Digit7:
  314.    AREA STEP(8*stp,-8*stp):AREA STEP(-6*stp,0):AREA STEP(0,stp)
  315.    AREA STEP(-2*stp,0):AREA STEP(0,-3*stp):AREA STEP(11*stp,0)
  316.    AREA STEP(0,2*stp):AREA STEP(-8*stp,8*stp):AREA STEP(-3*stp,0)
  317.    AREAFILL
  318.   RETURN
  319.  END
  320.  Digit8:
  321.    AREA STEP(0,-stp)
  322.    AREA STEP(0,-3*stp):AREA STEP(stp,-stp):AREA STEP(-stp,-stp)
  323.    AREA STEP(0,-3*stp):AREA STEP(stp,-stp):AREA STEP(8*stp,0)
  324.    AREA STEP(stp,stp):AREA STEP(0,3*stp):AREA STEP(-stp,stp)
  325.    AREA STEP(stp,stp):AREA STEP(0,3*stp):AREA STEP(-stp,stp)
  326.    AREA STEP(-8*stp,0):AREA STEP(-stp,-stp)
  327.    AREAFILL
  328.    AREA STEP(1+2*stp,1-3*stp)
  329.    AREA STEP(6*stp-2,0):AREA STEP(0,2*stp-2):AREA STEP(2-6*stp,0)
  330.    COLOR bckgr:AREAFILL
  331.    AREA STEP(0,1-6*stp):AREA STEP(6*stp-2,0)
  332.    AREA STEP(0,2*stp-2):AREA STEP(2-6*stp,0)
  333.    AREAFILL
  334.   RETURN
  335.  END
  336.  Digit9:
  337.    AREA STEP(0,-2*stp):AREA STEP(8*stp,0):AREA STEP(0,-2*stp)
  338.    AREA STEP(-7*stp,0):AREA STEP(-stp,-stp):AREA STEP(0,-4*stp)
  339.    AREA STEP(stp,-stp):AREA STEP(8*stp,0):AREA STEP(stp,stp)
  340.    AREA STEP(0,8*stp):AREA STEP(-stp,stp):AREA STEP(-9*stp,0)
  341.    AREAFILL
  342.    PSET STEP(8*stp,-8*stp):AREA STEP(-1,2*stp-1)
  343.    AREA STEP(2-6*stp,0):AREA STEP(0,2-2*stp):AREA STEP(6*stp-2,0)
  344.    COLOR bckgr:AREAFILL  
  345.   RETURN  
  346.  END
  347. END SUB 
  348. Plus:
  349.   PSET(Xstart,Ystart),clr1:AREA STEP(0,-4*stp):AREA STEP(0,-2*stp)
  350.   AREA STEP(4*stp,0):AREA STEP(0,-4*stp):AREA STEP(2*stp,0)
  351.   AREA STEP(0,4*stp):AREA STEP(4*stp,0):AREA STEP(0,2*stp)
  352.   AREA STEP(-4*stp,0):AREA STEP(0,4*stp):AREA STEP(-2*stp,0)
  353.   AREA STEP(0,-4*stp):AREA STEP(-4*stp,0)
  354.   COLOR clr2:AREAFILL
  355.  RETURN
  356. END 
  357. Minus:
  358.   PSET(Xstart,Ystart),clr1:AREA STEP(0,-4*stp):AREA STEP(0,-2*stp)
  359.   AREA STEP(10*stp,0):AREA STEP(0,2*stp):AREA STEP(-10*stp,0)
  360.   COLOR clr2:AREAFILL
  361.  RETURN
  362. END 
  363. Times:
  364.   PSET(Xstart,Ystart),clr1:AREA STEP(0,-stp):AREA STEP(4*stp,-4*stp)
  365.   AREA STEP(-4*stp,-4*stp):AREA STEP(0,-stp):AREA STEP(stp,0)
  366.   AREA STEP(4*stp,4*stp):AREA STEP(4*stp,-4*stp):AREA STEP(stp,0)
  367.   AREA STEP(0,stp):AREA STEP(-4*stp,4*stp):AREA STEP(4*stp,4*stp)
  368.   AREA STEP(0,stp):AREA STEP(-stp,0):AREA STEP(-4*stp,-4*stp)
  369.   AREA STEP(-4*stp,4*stp):AREA STEP(-stp,0)
  370.   COLOR clr2:AREAFILL
  371.  RETURN
  372. END  
  373. Divide:
  374.   PSET(Xstart,Ystart),clr1:AREA STEP(0,-4*stp):AREA STEP(0,-2*stp)
  375.   AREA STEP(10*stp,0):AREA STEP(0,2*stp):AREA STEP(-10*stp,0)
  376.   COLOR clr2:AREAFILL
  377.   CIRCLE(Xstart+5*stp,Ystart-9*stp),stp*1.4
  378.   PAINT(Xstart+5*stp,Ystart-9*stp),clr2
  379.   CIRCLE(Xstart+5*stp,Ystart-stp),stp*1.4
  380.   PAINT(Xstart+5*stp,Ystart-stp),clr2
  381.  RETURN
  382. END 
  383. SetMenu:
  384.   MENU 1,0,1,"Operation"
  385.   MENU 1,1,1,"Addition"
  386.   MENU 1,2,1,"Subtraction"
  387.   MENU 1,3,1,"Multiplication"
  388.   MENU 1,4,1,"Division"
  389.   MENU 1,5,1,"Quit"
  390.   MENU 2,0,1,"Maximum"
  391.   MENU 2,1,1,"     10"
  392.   MENU 2,2,1,"    100"
  393.   MENU 2,3,1," Define"
  394.   MENU 2,4,1,"Display"
  395.   MENU ON
  396.  RETURN
  397. END
  398. Op:
  399.   oldchoice=MENU(1)
  400.   IF oldchoice<3 AND Maximum>1000 THEN Maximum=1000
  401.   IF oldchoice>2 AND Maximum>31 THEN Maximum=31 
  402.  RETURN
  403. END
  404. MaxNum:
  405.   IF MENU(1)=1 THEN
  406.     Maximum=10:RETURN
  407.   END IF
  408.   IF MENU(1)=2 THEN
  409.     Maximum=100:IF oldchoice>2 THEN Maximum=31 
  410.     RETURN
  411.   END IF
  412.   IF MENU(1)=4 THEN GOSUB DisplayMaximum:RETURN 
  413.   TryAgain:
  414.     LINE(5,120)-(130,140),bckgr,bf
  415.     LOCATE 16,2:PRINT "Maximum Number";
  416.     LOCATE 17,2:PRINT CHR$(62);" ";
  417.     answTemporary=answer:ndTemporary=nd
  418.     GOSUB GetAnswer:Maximum=answer:answer=answTemporary:nd=ndTemporary   
  419.     IF oldchoice<3 AND Maximum>1000 THEN TryAgain
  420.     IF oldchoice>2 AND Maximum>31 THEN TryAgain
  421.     LINE(5,120)-(150,152),bckgr,bf
  422.  RETURN
  423. END
  424. ProcessMenu:
  425.   MenuOn=MENU(0)                  
  426.   ON MenuOn GOSUB Op,MaxNum
  427.   MenuOn=0
  428.  RETURN
  429. END
  430. DisplayMaximum:
  431.   LOCATE 16,2:PRINT "Maximum Number";
  432.   LOCATE 17,2:PRINT CHR$(62);" ";Maximum
  433.   WHILE MOUSE(0)=0:WEND
  434.   LINE(5,120)-(150,152),bckgr,bf
  435.  RETURN
  436.       
  437.   
  438.